Giving Up Contiguity

References and Aliasing


참조(reference)를 복사하면 객체가 복제되지 않는다. 두 이름이 같은 객체를 가리키는 별칭(alias) 상태에서는 한 이름을 통한 객체 변경이 다른 이름에서도 보인다.

참조 복사v = u는 u가 가리키는 객체를 v도 가리키게 한다.
객체 변경v.data = 99는 공유 객체의 값을 바꾼다.
이름 재지정v = Node(26)은 v의 화살표만 새 객체로 옮긴다.

변경과 재지정은 서로 다른 대상을 바꾼다

같은 v = u에서 시작해 세 번째 줄이 공유 객체를 바꾸는지 v의 참조만 옮기는지 단계별로 구분한다.

u = Node(54)v = uv.data = 99
짙은 줄은 지금 실행한 코드다. 이름에서 노드로 이어진 선은 참조이고, 초록 테두리 노드는 두 이름이 함께 가리키는 객체, 흐린 노드는 아직 만들지 않은 노드다.

Python 참조와 C 포인터의 공통점과 차이를 구분한다

두 언어 모두 다음 노드를 가리키는 정보를 저장하지만 빈 값, 주소 연산과 메모리 회수 방식은 다르다.

Python 참조

C 포인터(pointer)

왼쪽은 Python, 오른쪽은 C에서 같은 항목을 쓰는 코드와 그 뜻이다.